计算机网络-网络层


1. 网络层的几个重要概念

  • 计算机网络模仿电信网络,使用面向连接通信方式
  • 通信之前先建立虚电路VC(Virtual Circuit)(即连接),以保证双方通信所需的一切网络资源
  • 如果再使用 可靠传输的网络协议,可使所发送的分组无差错按照次序到达终点,不丢失,不重复。

1.1 虚电路服务

虚电路只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式来传送,并不是真正建立了一条物理连接

1.2 数据报服务

网路在发送分组之前不需要先进行连接。每一个分组分组(IP数据报)独立发送,与其前后的分组无关。

由于传输网络不提供端到端的可靠传输服务,这就使得网络中的路由器比较简单。

网络层要设计得尽量简单,向其上层只提供简单灵活、无连接的、尽最大努力交付的数据报服务

  • 网络在发送分组的时候不需要先建立连接
  • 每一个分组(即IP数据报)独立发送,与其前后的分组无关(不进行编号)
  • 网络层不提供服务质量的承诺。即所传送的分支可能出错、丢失、重复和时序(不按序到达终点),也不保证分组传输的时限

由主机中的运输层负责可靠的通信

对比的方面 虚电路服务 数据报服务
思路 可靠的通信应当由网络来保证 可靠通信应当由用户主机来保证
连接的建立 必须有 不需要
终点地址 仅在连接建立的阶段来使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址
分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发
当结点出故障的时候 所有通过出故障的节点的虚电路均不能工作 出故障的节点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按照发送顺序到达终点 到达终点时不一定按发送顺序
端到端的查错处理和流量控制 可以由网络负责,也可以由用户主机负责 由用户主机负责

1.3 物理层上的数据交换技术与虚电路服务技术

  • 电路交换:建立连接-通信-释放连接,它的传输单位是报文,整个报文的比特流连续的从源点到达终点,这个过程中始终占用这个连接。

  • 报文交换:无需建立连接,它并不占用一整条连接,而是一段一段的。

当两台计算机进行通信的时候,应该先建立连接,在分组交换中建立一条虚电路(Virtual CirCuit),然后双方就沿着建立的虚电路发送分组。这样一来,分组的首部就不需要填充完整的目的主机地址,而只要填写这条虚电路的编号就可以了。

通过虚电路服务如果再使用可靠传输的网络协议,所发送的分组就可以无差错地按序到达终点,不存在丢失与重复的情况。两台主机之间进行分组的交换都必须在实现建立好的虚电路上。

数据报文中的虚电路号:当两台建立了虚电路的机器相互通信的时候,可以根据数据报文中的虚电路号,通过查找交换机的虚电路表从而得到它的输出线路,进而将数据传送到目的端

采用虚电路网络会使得网络核心部分变得复杂,需要所有经过这条电路的节点来进行共同的维护。如果虚拟电路断开,那么数据将会丢失,只能重新建立虚电路。

问题:电路交换和虚电路交换技术都存在一个核心,那就是建立一条连接通路,这两者有什么区别?

  • 物理连接层面上:CS(电路交换)是在通信的时候建立电路,在通信完毕的时候拆除电路,建立的线路是不固定的。而虚电路交换表示这只是一种逻辑上的连接,其传输的分组都沿着这条逻辑连接按照存储转发的方式传送,一般来说通信线路由交换机的虚电路表来维护。
  • 传输单元上看:CS(电路交换)的传输是传输报文数据,虚电路传输的是分组

问题:分组交换(数据报服务)和虚电路交换都是通过分组来传输数据的,它们有什么区别?

  • 通信线路连接的角度上来看:虚电路需要在交换机中维护一张虚电路编号表,这张表就代表着在进行虚电路交换的时候需要建立一层虚拟连接,而数据报服务不需要建立连接即可
  • 数据传输单元内容来看:虚电路上的数据单元的包头含有的是虚电路的编号,而数据报服务含有的是完整的终点地址。

1.4 网络层的两个层面

不同网络中的两个主机之间的通信,要经过若干个路由器转发分组来完成

在路由器之间传送的信息有以下2大类

  • 数据
  • 路由信息(为数据传送服务)

数据层面

  • 路由器根据本路由器生成的转发表,把收到的分组从查找到的对应接口转发出去
  • 独立工作
  • 采用硬件进行转发,快

控制层面

  • 根据路由选择协议的路由算法计算路由,创建出本路由器的路由表
  • 许多路由器协同动作
  • 采用软件计算

软件定义网络SDN(Software Defined Network)

路由器:查找转发表,转发分组

2. 网际协议IP

与网际协议配套的3个协议

地址解析协议ARP(Address Resolution Protocol):其作用进行网络地址MAC地址之间的转换

网际控制报文协议ICMP(Internet Control Message Protocol)

网际组管理协议IGMP(Internet Group Management Protocol)

2.1 虚拟互联网络

虚拟互联网络是为了实现网络互通、将异构的网络互相连接起来

其中一种方案就是使用中间设备进行互联

中间设备
运输层及以上 网关(GateWay)
网络层 路由器(router)
数据链路层 网桥或者桥接器(bridge),交换机(switch)
物理层 转发器

2.2 IP地址与MAC地址之间的关系

从最终的结果这个角度上来讲,数据包的目标IP地址决定了数据包最终将会到达哪一台计算机,而目标MAC地址决定了该数据包下一跳将由哪个数据进行接收,不一定是终点。

从这张图可以简单总结一下,首先数据包包含了起点的IP地址和终点的IP地址,这是在数据链路层以上定义的。而在发送交换过程中,需要记录下一跳的硬件MAC地址,因此在每次运输到新的以太网的路由器的时候,都会经过拆解数据链路层封装的帧信息,也就是将帧中的目标MAC地址更新,直到到达目标硬件被接收。

其中路由器起到了比较重要的作用,也就是将源地址和目标地址进行了路由转换,从而找到合适的端口将其转发出去。可以简单归纳为:在不同的网段中转发数据包

如果只有MAC地址而没有IP地址会怎么样?

如果没有IP地址,那么交换机在转发数据的时候,需要记住所有设备的MAC地址,并记住这些MAC地址所对应的端口映射,姑且不谈当设备的MAC地址发生变化的时候(不是指MAC地址本身发生变化,而是说MAC地址所对应的设备链接的端口发生了变化),与之相关的所有交换机都要发生对应的更新,这将会是非常巨大的开销,至于IP地址所具有的好处,下面将会开始讲解。

2.3 IP地址格式

IP地址用32位二进制来进行表示,也就是32比特,4个字节,这些位通常分割为4个部分,每一部分8个二进制位,中间使用符号.进行隔开,这种方法被称为点分十进制法

2.4 子网掩码

子网掩码:叫做网络掩码,地址掩码,它是用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码,子网掩码只有一个作用,就是将某个IP地址区分为网络部分主机部分

子网掩码的计算过程是与运算,这样做的目的是为了屏蔽主机位上的值

3. IP地址分类

3.1 A类地址

网络地址的最高位是0的地址为A类地址。网络ID是0则不能用,127作为保留网段,因此A类地址的第一部分取值是1~126

A类地址默认子网掩码为255.0.0.0,主机ID由第二部分、第三部分和第四部分组成,每部分的取值都是0~255一共256个取值,同时需要知道的是,主机ID全为0的地址是网络地址,而主机ID全部为1是广播地址。

3.2 B类地址

网络地址的最高位是10 的地址是B类地址,IP地址第一部分取值范围是128-191

B类地址的默认子网掩码是255.255.0.0,主机ID由第三部分和第四部分组成。

3.3 C类地址

网络地址的最高位是110的地址是C类地址,IP地址的第一部分取值是192-223,C类地址的默认子网掩码是255.255.255.0,主机ID由第四部分组成,每个C类网络可以容纳的最主机数就是256-1(全1)-0(全0) = 254

3.4 D类地址和E类地址

网络地址的最高位是1110的地址是D类地址,D类地址的第一部分的取值范围是224-239,用于多播组播的地址,组播地址是没有子网掩码的。

子网掩码的目的是为了区分主机号与网络号,如果是多播,那么就是广播到多个主机,子网掩码就失去了其作用。

网络地址的最高位是11110地址为E类地址,第一部分取值范围240-254,保留为今后使用

其实所谓的分类也就是将所有的IP地址进行拼接与分离。

3.5 保留的IP地址

  • 主机ID全为0的地址,特指某个网段,比如192.168.10.0 255.255.255.0指的是192.168.10.0网段
  • 主机ID全部为1的地址,特指该网段上的所有主机,数据链路层发送的将会是FF-FF-FF-FF-FF-FF
  • 127.0.0.1:是本地环回地址,指的是本机IP地址,一般用来测试和使用,回送地址127.x.x.x:是本地回送地址Loopback Address,也就是主机IP堆栈内部的IP地址

3.6 公网地址和私网地址

  • 公网地址:公有地址和管理由Inter NIC负责,各级ISP使用的公网地址都需要进行申请,这样就能保证地址块不冲突
  • 私网地址:创建IP寻址方案的人也创建了私网IP地址,这些地址可以被用于私有网络,在Internet没有这些IP地址,Internet上的路由器也没有到私有网络的路由表

3.7 网络地址转换技术NAT

私网地址访问Internet需要NAT或者PAT,原理图如下

简单来说,NAT就是提供一个转换技术,内网使用一个私有的网段地址,当要与互联网通信的时候,将私有的地址转换为公网地址,让公网地址去与外部通信。

来回顾一下私网与公网的交互过程,首先就是私网的计算机要与公网的计算机进行通信,那么必然就要发送分组,分组中会包装源地址和目的地址,假设我们包装私网的IP去访问公网,是没问题的,因为路由器的特性决定了我只关注你要去哪里,而不关注你从哪里来,因此尽管你这个私网地址是无法从公网到达的,我也能将数据报发送到公网的计算机去。

然后公网的计算机要响应数据给私网的计算机了,这时候路由器就会蒙圈,因为你之前用的是私网的IP路由器转发表中并没有私网的IP啊,这时候响应的数据就会发不回去,就会出现ping失败的现象。

那么怎么办呢?提供一个可在路由转发表的公网IP,作为私网的数据出口,每一个要与公网通信的私网IP都通过此路由器,将私网IP修改为公网IP,然后依次转发,这样就能确保响应数据的时候,数据能够回来。

也许你会问,既然知道了数据是通过公网IP回来的,那么如果我私网IP有很多个同时发数据出去,然后同时接数据回来,这时候我怎么确认哪个包是哪个客户端的呢?这里看一下百度百科的定义。

NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。

①如右图1这个 client(终端) 的 gateway (网关)设定为 NAT 主机,所以当要连上 Internet 的时候,该封包就会被送到 NAT 主机,这个时候的封包 Header 之 source IP(源IP) 为 192.168.1.100 ;

图1 Nat工作流程2

​ 图1 Nat工作流程2

②而透过这个 NAT 主机,它会将 client 的对外联机封包的 source IP ( 192.168.1.100 ) 伪装成 ppp0 ( 假设为拨接情况 )这个接口所具有的公共 IP ,因为是公共 IP 了,所以这个封包就可以连上 Internet 了,同时 NAT 主机并且会记忆这个联机的封包是由哪一个 ( 192.168.1.100 ) client 端传送来的;

③由 Internet 传送回来的封包,当然由 NAT主机来接收了,这个时候, NAT 主机会去查询原本记录的路由信息,并将目标 IP 由 ppp0 上面的公共 IP 改回原来的 192.168.1.100 ;

④最后则由 NAT 主机将该封包传送给原先发送封包的 Client [2] 。

可以看到NAT主机帮我们做了这个事情,也就是在数据报中记录了私网原IP,便于复原。

4.子网划分

4.1 等长子网划分

子网划分:就是借用现有网段的主机位做子网位,划分出多个子网。

等长子网划分:就是将一个网段等分成多个网段,也就是等分成多个子网

  • 需要确定子网掩码的长度
  • 需要确定子网中第一个可用IP地址和最后一个可用的IP地址

4.2 变长子网划分

简单来说就是根据设备的个数来划定网段,并且根据网段来确定子网掩码,最简单的办法是根据最大的设备数量来确定基础网段,然后再根据基础网段进行位运算,根据位运算后的结果来确定子网掩码。

如果一个子网地址块是原来网段的$$(\frac{1}{2})^n$$,子网掩码就在原网段的基础上后移n位,不等长子网,其子网掩码也不相同。

在上述的划分中,还有D和E网段还没有被使用,而且这两个网段所需要的IP地址数量为2,加上全0和全1的限制,那么就是需要4个IP地址。

观察到032还没有被用,因此接下来考虑如何使用`032`的地址

4. CIDR无分类

IP地址有类的概念,A类地址默认子网掩码255.0.0.0,B类地址的默认子网掩码是255.255.0.0,C类地址的默认子网掩码是255.255.255.0,等长子网划分和变长子网划分,打破了IP地址类的概念,子网掩码也打破了字节的限制,这种子网掩码被称为VLSM,可变长子网掩码

这种方式的也可以使得路由器上的路由表大大精简,被称为CIDR(Classless Inter-Domain Routing),子网掩码中1的个数被称为CIDR

  • CIDR:无分类域间路由选择。
  • 消除了传统的A类、B类和C类地址以及划分子网的概念,可以更加有效地分配IPv4,但无法解决IP地址枯竭的问题

要点

  • 网络前缀
  • 地址块
  • 地址掩码

4.1 网络前缀

2级结构2个字段:网络前缀和主机号,IP地址::={<网络前缀>,<主机号>}

网络前缀的位数n是多少?

最大的区别:前缀的位数n不固定,可以在0~32之间选取任意值。

  • CIDR记法:斜线记法,二进制IP地址的前n位是网络前缀,例如128.14.35.7/20的前20位是网络前缀。

4.2 地址块

  • CIDR把网络前缀都相同的所有连接的IP组成一个CIDR的地址块
  • 一个CIDR地址包括的IP地址数目,取决于网络前缀的位数

4.3 地址掩码(address mask)

也就是子网掩码,位数32位,目的让机器从IP地址迅速算出网络地址。

4.4 构造超网

超网的构造可以看作是划分子网的逆运算

其本质是对网络地址的合并,合并若干个x类网络,其具体手段可以是将子网掩码向左位移n位,达到合并的效果。什么场景下需要子网的合并?

当有一个交换机A下有200台计算机,交换机B下有200台计算机,由于超出了其向上的最大一个数量限制是255,因此分配地址的时候需要两个网段,比如说是192.168.0.0192.168.1.0,如果没有子网合并(超网)技术,那么就需要在路由器中建立路由表,记录下192.168.0.0192.168.1.0这也就意味着:

这两个交换机下的设备是可以直接通过交换机的相互交换来进行通信的,可是现在需要多了一层路由器来进行转发。

可见,并不是任何连续的网段都能被合并,比如说我想合并1和2,那这时候由于有两位不一样,因此需要子网掩码向左移动两位才足够,但是这时候就把0和3都一起合并进来了,这时候可能就会合并了冲突的网段,可能导致有问题产生。

结论:判断连续的2个网段是否能够合并,只要第一个网络号能被2整除,就能够通过左移1位子网掩码合并

这句话有两个关键点,连续以及网络号有序

推广的,对于n个网段是否能够被合并,只要第一个网络号能被n整除,就能够通过左移(log2n)位子网合并

4.5 判断一个网段是子网还超网

通过左移子网掩码合并多个网段,右移子网掩码将一个网段划分为了多个子网。

如果要判断一个网段到底是子网还是超网,就要看该网段是A类网络还是B类网络,还是C类网络,默认A类子网掩码/8,B类子网掩码/16,C类子网掩码/24

如果该网段的子网掩码比默认子网掩码要长,那就是子网,如果该网段的子网掩码比默认掩码要短,那就是超网。

这个比较好理解,子网掩码左移的话就证明网络号缩短,主机号增长,主机号增多,网段下的主机数量增加,网段被合并,子网掩码右移的话网络号增长,主机号缩短,网段下的主机数量减少,网段被划分。

所谓默认子网掩码的话就是要看网络号,根据网络来判断其是哪一类地址

5. 静态理由

5.1 路由-网络层实现的功能

网络层的功能就是给传输层协议提供简单灵活的、无连接的、尽最大努力交付的数据包服务

通俗地来说,网络中的路由器为每一个数据包单独选择转发路径,网络层不提供服务质量的承诺

也就是说路由器直接丢弃传输过程中出错的数据包,如果网络中代发的数据包太多,路由器处理不了也会直接丢弃,路由器也不判断数据包是否重复,也不确保数据包按照顺序发往目标地址

网络畅通的条件:数据包有去有回

5.2 静态路由

在初始时,路由器只知道直连的网络地址,但是如果间隔某个节点,也就是目标节点对于这个路由器不是直连的,这个路由器就不知道怎么走了,这时候就需要网络管路员告诉路由器,这个地址该怎么走。

添加静态路由的基本指令

ip route <目标网段> <子网掩码> <出去的地址>
#如果想要单独发送给某个地址id
ip route <目标ip> <255.255.255.255> <出去的地址>

点到点的链路的下一跳可以是路由器的出口

删除路由的基本指令

no ip route <目标网段> <子网掩码> <出去的地址>

5.3 路由汇总与默认路由

路由汇总指的是将一部分相同网络地址的路由网络汇总起来,这样的话边缘理由只需要转发数据包到一个汇总路由上就可以完成转发功能。

简而言之,就是路由器在转发数据的时候,会先检查子网掩码长的,后检查子网掩码短的,这样的话可以保证子网掩码长的ip地址被检查到,否则会因为子网掩码长的ip把子网掩码短的ip给覆盖了而永远检查不到子网掩码长的ip地址。

默认路由

添加默认路由

ip route 0.0.0.0 0.0.0.0 10.0.0.2

其中0.0.0.0这个地址涵盖了所有的网段,是最大的路由,这个路由称为默认路由

默认路由的使用场景

如何理解这个操作呢?我们以路由器B为例,路由器B是一个末端路由器,连接在网段为10.1.0.0/24的以太网的末端上,可以看到B如果要转发数据到其他网段,其必经之路是10.2.0.1/24,那么就存在一种甩锅的手段,也就是说如果我B路由表中查找不到了下一跳地址,那么我就会把这个查询交给我的必由之路,让它去查询有没有,一层层地发过去,直到找到为止。

对于C这种而言,它处于有多边连接的,这种默认路由的选择就是先指定其他路由地址,然后剩下任意一个的时候,把它作为默认路由即可。

6. 动态路由

6.1 RIP协议简介

路由信息协议RIP(Routing Information protocol)是一个距离矢量路由选择协议

它每隔30秒就送出自己完整的路由表到所有激活的端口

RIP协议选择最优的标准就是跳数,认为到达目标网络所经过的路由器最少的路径就是最佳路径

默认它允许的最大跳数为15跳,也就是说16跳及其以上的距离被认为就是不可达的

在小型网络中,RIP会运转良好,但是对于慢速WAN连接的大型网络或者安装有大量路由器的网络来说,它的效率就比较低。

6.2 RIP协议工作原理

简单来说,RIP协议选择路由器的标准就是跳数,每隔30秒就更新路由信息,向整个网络中的路由器广播自己,从而达到信息更新的目的

  • RIPv1:靠的是广播信息,不带子网掩码,不支持变长子网,支持等长子网
  • RIPv2:使用的是多播通告,带子网掩码,支持变长子网

6.3 RIP数据包的格式

RIP的首部占4个字节,其中的命令字段指出报文的意义,例如1表示的是请求理由信息,2表示请求理由信息的响应或者未被请求而发出的路由更新报文,首部后面的必为0是为了进行字节的对齐

RIPv2报文中的路由部分由若干个路由信息组成,每个路由信息需要用20个字节,地址族标识符字段用来标识所使用的地址协议。如果采用的是IP协议,就令这个字段的值为2。原来考虑RIP也可以用于其他非TCP/IP协议的情况。路由标记填入自治系统号ASN,这是考虑使得RIP有可能接收到本自治系统意外的路由选择信息,再后面指出某个网络地址,该网络的子网掩码、下一跳的路由器地址以及到此网络的距离。一个RIP报文最多可以包括25个路由,因此RIP报文的最大长度是4+20*25=504字节。

7. 网络层的首部

7.1 格式

IP数据包首部的格式能够说明IP协议都具有什么功能

IP数据包由首部和数据两部分组成,首部的前一部分是固定长度,共20个字节,是所有IP数据包必须有的,在首部的固定部分的后面是一些可选的字段,其长度是可变的。

这个图该如何来看呢?首先要看懂这个图的单位,竖着下来的首部具有20个字节,是表示固定部分具有20个字节,横着过来的写着的是0~31位,也就是说在分成每层4个字节的情况下,在这一层中,每4个字节中,有多少位是用来表示这些数据的。

比如说第03个字节,其中第03个二进制位用来表示版本号。

值得注意的是,由于数据的封装,我们认为传输层下来的东西都在数据部分中

7.2 版本和首部长度

版本占4位,指IP协议的版本,IP协议目前有ipv4和ipv6,通信双方使用的IP协议必须一致,目前广泛使用的IP协议版本号为4

首部长度占4位,可表示的最大十进制数为15,请注意,这个字段所表示的数的单位是32位二进制数(4个字节),因此,当IP的首部长度为1111的时候,也就是十进制的15的时候,首部的长度就达到了60个字节。

7.3 区分服务

简单来说,区分服务就是一个优先级字段,它的作用是在出口队列中给这个数据包指定转发次序,优先级高的先转发出去,以便获得较高的带宽。但是这种服务是有要求的,它要求请求方和接收方都认可这种标记,否则的话这个字段就起不到作用。

它占8位,配置计算机给特定应用程序的数据包添加一个标志,然后再配置网络中的路由器优先转发这些带标志的数据包,在网络带宽比较紧张的情况下,也能确保这种应用的带宽有保障,这就是区分服务,为这种服务保证服务质量。

7.4 总长度

总长度占的地位是第0个字节的第16-31个比特,它用来指代包含首部和数据部分的总长度。因此数据包的最大长度就是65536个字节

但是回顾之前数据链路层的内容的话,一个帧的数据部分不能超过1500个字节,而65536个字节是远远超过了的,因此需要进行分片

7.5 分片标志

分派标志一共有3位:

  • 分片标志的最后一位作用是用来标志是否是最后一个分片,如果是最后一个分片,则分片标志为0,否则为1
  • 第二位的作用是用来标志是否允许分片,如果是1,那么就不允许分片,否则可以

7.6 片偏移

7.7 生存时间

占8位,指示数据报在网络中可通过的路由器的最大值

7.8 协议

占8位,指出此数据携带的数据使用的协议,以便目的主机的IP层将数据部分上交给哪个处理进程

7.9 首部校验和

首部校验和,占16位,只校验数据包的首部,不校验数据部分,这里不采用CRC检验码而采用简单的计算方法


文章作者: 穿山甲
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 穿山甲 !
  目录